package com.totoro.dubbo.properties;

import com.sun.istack.internal.NotNull;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

/**
 * 服务提供者协议配置
 * Created by Niki on 2018/7/3 8:57
 */
@Configuration
@ConfigurationProperties(prefix = "dubbo.protocol")
@Getter
@Setter
public class ProtocolConfigProperties {
    /**
     * 协议名称
     */
    @NotNull
    private String name;
    /**
     * 协议id，不填与name一样
     */
    private String id;
    /**
     * 协议端口号，
     * dubbo协议默认20880
     * rmi协议默认1099
     * htp和hessian默认80
     */
    private Integer prot;

    /**
     * 服务主机名，默认查找本机IP
     */
    private String host;

    /**
     * 线程池类型
     * fixed
     * cached
     */
    private String threadpool;
    /**
     * 线程池大小
     */
    private Integer threads;
    /**
     * CPU个数。默认当前CPU数+1 用于IO线程池大小
     */
    private Integer iothreads;

    /**
     * 服务方最大可接受连接数
     */
    private Integer accept;

    /**
     * 请求及响应数据包大小限制
     */
    private Integer payload;
    /**
     * 协议编码方式
     * 默认dubbo
     */
    private String codec;
    /**
     * 协议序列化方式
     * 默认为hessian2,rmi协议缺省方式为java
     * http协议缺省为json
     */
    private String serialization;

    /**
     * 是否向log输出访问日志
     */
    private boolean accesslog;
    /**
     * 提供者上下文路径，为服务path的前缀
     */
    private String path;
    /**
     * 协议传输
     * dubbo协议默认netty
     */

    private String transporter;
    /**
     * 协议的服务器端实现类型
     * dubbo协议缺省netty，可选mina
     * http协议缺省servlet 可选jetty
     */
    private String server;
    /**
     * 协议的客户端器端实现类型
     * dubbo协议缺省netty，可选mina
     * http协议缺省servlet 可选jetty
     */
    private String client;
    /**
     * 协议的消息派发方式，用以指定线程模型
     * dubbo协议的all，direct，message，execution， connection
     */
    private String dispatcher;
    /**
     * 线程池队列大小，当线程池满时，排队等待执行队列大小
     * 建议不要设置，当线程程池时应立即失败，重试其它服务提供机器，而不是排队，除非有特殊需求。
     */
    private Integer queues;
    /**
     * 序列化编码
     * 默认UTF-8
     */
    private String charset;
    /**
     * 网络读写缓冲区大小
     */
    private Integer buffer;
    /**
     * 心跳间隔
     * 对于长连接，当物理层断开时，比如拔网线，TCP的FIN消息来不及发送，对方收不到断开事件，此时需要心跳来帮助检查连接是否已断开
     */
    private Integer heartbeat;
    /**
     * 所支持的telnet命令
     */
    private boolean telnet;
    /**
     * 该服务是否注册到注册中心
     */
    private String register;
    /** */
    private String contextpath;


}
